package com.ssm.design.chain.handler.v2;

import com.ssm.design.chain.context.OrderHandleContext;

public abstract class AbstractHandlerV2<T> {

    private AbstractHandlerV2<T> next;

    /**
     * 我是否愿意处理
     *
     * @param context
     * @return
     */
    protected boolean isThisNodeDeal(OrderHandleContext context, T param) {
        return Boolean.TRUE;
    }

    public void doHandle(OrderHandleContext context, T param) {
        // 我是否可以处理
        if (isThisNodeDeal(context, param)) {
            // 让我来处理
            doHandle(param);
        }
        // 我处理完了，交给下家
        if (this.next != null) {
            this.next.doHandle(context, param);
        }
    }

    /**
     * 具体业务处理
     *
     * @param t
     */
    protected abstract void doHandle(T t);

    public void setNext(AbstractHandlerV2<T> next) {
        this.next = next;
    }
}